package org.manekineko;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

import org.manekineko.utils.CollectionUtils;
import org.manekineko.utils.StringUtils;

/**
 * 
 * @author josen
 * 
 */
public class AnaliseFaixasMS {

	public static void main(String[] args) {
		System.out.println("------------------------------------------");
		executar(15);
		System.out.println("------------------------------------------");
		executar(20);
	}
	
	public static void executar(int factor) {
		Map<String, Integer> faixas = new TreeMap<String, Integer>();
		
		for (int i = 1; i <= 60; i++) {
			StringBuilder key = new StringBuilder();
			if (i < 10) {
				key.append("0" + i);
			} else {
				key.append(i);
			}
			key.append("|");
			key.append(i + factor - 1);
			i = (i + factor - 1);
			faixas.put(key.toString(), 0);
		}

		Map<String, Integer> totais = new HashMap<String, Integer>();

		int qtSorteios = 0;
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(new File("/home/josen/results.txt")));

			String line = null;
			while ((line = reader.readLine()) != null) {
				Integer[] dist = distribuicao(faixas, StringUtils.splitAsIntArray(line, true));
				if (!totais.containsKey(parseKey(dist))) {
					totais.put(parseKey(dist), 0);
				}
				totais.put(parseKey(dist), totais.get(parseKey(dist)) + 1);
				qtSorteios++;
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		totais = CollectionUtils.sortByValues(totais);
		for (String key : totais.keySet()) {
			System.out.println(key + "," + totais.get(key) + "," + Float.valueOf(totais.get(key))
					/ Float.valueOf(qtSorteios) * 100);
		}
	}

	public static String parseKey(Integer[] faixas) {
		StringBuilder result = new StringBuilder();
		for (int i = 0; i < faixas.length; i++) {
			result.append(faixas[i]);
		}
		return result.toString();
	}

	public static Integer[] distribuicao(Map<String, Integer> distribuicao, Integer[] a) {
		Integer[] result = new Integer[distribuicao.size()];
		for (int i = 0; i < result.length; i++) {
			result[i] = 0;
		}

		int pos = 0;
		for (String key : distribuicao.keySet()) {
			String[] faixas = key.split("\\|");
			for (int i = 0; i < a.length; i++) {
				if (a[i] >= Integer.valueOf(faixas[0]) && a[i] <= Integer.valueOf(faixas[1])) {
					result[pos]++;
				}
			}
			pos++;
		}

		return result;
	}
}